package com.dick.base.parameter;

import lombok.Data;

import javax.validation.Valid;
import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.util.List;

@Data
public class OrderParameter {

    @Valid
    @NotNull(message = "请输入订单基础信息")
    private OrderInfo orderInfo;

    @Valid
    @NotEmpty(message = "请输入订单数据项")
    private List<Item> items;

    @Data
    public static class OrderInfo {
        /**
         * 销售日期
         */
        @NotEmpty(message = "请输入订单日期")
        @Pattern(regexp = "\\d{4}-\\d{2}-\\d{2}", message = "订单日期格式不正确，必须为yyyy-MM-dd格式")
        private String saleDate;
        /**
         * 客户id
         */
        @NotNull(message = "请选择客户")
        private Long customerId;
        /**
         * 工程id
         */
        @NotNull(message = "请选择工程")
        private Long projectId;
        /**
         * 批次号，长度限制32
         */
        @NotEmpty(message = "请输入批次号")
        @Size(max = 32, message = "批次号长度不能超过32字符串")
        private String batchNumber;
        /**
         * 铝锭单价，单位：元/kg
         */
//        @NotNull(message = "请输入材料成本单价，单位：元/kg")
        private BigDecimal materialPrice = BigDecimal.ZERO;
        /**
         * 销售单价，单位：元/kg
         */
//        @NotNull(message = "请输入材料销售单价，单位：元/kg")
        private BigDecimal salePrice = BigDecimal.ZERO;
        /**
         * 紧急程度：10-轻度 20-中度 30-加急
         */
        @NotNull(message = "请选择紧急程度")
        private Integer urgent;
        /**
         * 价格方式：10-进货日期价格 20-出货日期价格
         */
        @NotNull(message = "请选择价格方式")
        private Integer priceType;
        /**
         * 销售员，16
         */
        @Size(max = 16, message = "销售员长度不能超过16字符串")
        private String saleName;
        /**
         * 备注，128
         */
        @Size(max = 128, message = "订单备注长度不能超过128字符串")
        private String memo;
    }

    @Data
    public static class Item {
        /**
         * 材质，长度限制0~32
         */
        @NotEmpty(message = "请输入‘材质’")
        @Size(max = 32, message = "'材质'不能超过32字符长度")
        private String material;
        /**
         * 厚度，长度限制0~32，单位mm
         */
        @NotEmpty(message = "请输入‘厚度’")
        @Size(max = 32, message = "'厚度'不能超过32字符长度")
        private String thickness;
        /**
         * 宽度，int类型，单位mm
         */
        @NotNull(message = "请输入'宽度'")
        @Min(value = 1, message = "'宽度'必须大于1毫米")
        private Integer width;
        /**
         * 长度，int类型，单位mm
         */
        @NotNull(message = "请输入'长度'")
        @Min(value = 1, message = "'长度'必须大于1毫米")
        private Integer length;
        /**
         * 数量，int类型，单位：张
         */
        @NotNull(message = "请输入‘数量’")
        @Min(value = 1, message = "'数量'必须大于1")
        private Integer quantity;
        /**
         * 重量，int类型，单位：千克
         */
        @NotNull(message = "请输入‘重量’")
        @DecimalMin(value = "0", message = "重量不能低于0")
        private BigDecimal weight;
        /**
         * 是否贴膜
         */
        @NotNull(message = "请选择'贴膜'")
        private Boolean film;
        /**
         * 是否改板
         */
        @NotNull(message = "请选择'改版'")
        private Boolean changeSpecification;
        /**
         * 交付材质，长度限制0~32
         */
        @Size(max = 32, message = "'材质'不能超过32字符长度")
        private String materialActual;
        /**
         * 交付厚度，长度限制0~32，单位mm
         */
        @Size(max = 32, message = "'厚度'不能超过32字符长度")
        private String thicknessActual;
        /**
         * 交付宽度，int类型，单位mm
         */
        @Min(value = 1, message = "'宽度'必须大于1毫米")
        private Integer widthActual;
        /**
         * 使用的库存板id
         */
        private Long boardId;
        /**
         * 备注，长度限制128
         */
        @Size(max = 128, message = "'备注'不能超过128字符长度")
        private String memo;
    }
}
